﻿using Autofac;
using System.Linq;
using System.Reflection;

namespace ZhongKeSite.Web
{
    public class AutofacModuleRegister : Autofac.Module
    {
        //重写Autofac管道Load方法，在这里注册注入
        protected override void Load(ContainerBuilder builder)
        {
            //InstancePerLifetimeScope：同一个Lifetime生成的对象是同一个实例
            //SingleInstance：单例模式，每次调用，都会使用同一个实例化的对象；每次都用同一个对象；
            //InstancePerDependency：默认模式，每次调用，都会重新实例化对象；每次请求都创建一个新的对象；

            //获取所有需要依赖注入的程序集
            //ZhongKeSite.Repository，ZhongKeSite.Service是服务所在程序集命名空间

            Assembly[] assembliesArray = new Assembly[] {
                Assembly.Load("ZhongKeSite.Repository"),
                Assembly.Load("ZhongKeSite.Service"),
                Assembly.Load("ZhongKeSite.Entity")
            };

            //自动注册接口
            builder.RegisterAssemblyTypes(assembliesArray)
                .Where(t => t.Name.EndsWith("Repository") || t.Name.EndsWith("Service")
                || t.Name.EndsWith("Context"))
                .AsImplementedInterfaces(); //见上方说明
        }
    }
}
